/* This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package Modelo;
import Controlador.*;

import java.util.*;
import java.io.*;


/**
 * Clase que representa una tecnica de busqueda de archivos en el disco
 * @author Armando Machuca Llorente
 */
public class TecnicaDisco extends Tecnica {
    
    
    /**
     * Constructor de la clase TecnicaDisco
     * @param tipo Tipo de tecnica: instalado o desinstalado
     * @param plugin Referencia Plugin al que pertenece la tecnica
     */
    public TecnicaDisco(String tipo,Plugin plugin){
        _param=new Vector<Parametro>();
        _tipo=tipo;
        _plugin=plugin;
        _resultados=new Vector();
    }
    
    /**
     * Metodo que ejecuta la tecnica
     * @param unidad Unidad sobre la que se ejecuta la tecnica
     */
    public void ejecutar(String unidad){
        
        if(getValue("tipo").compareTo("barchivo")==0){
            bArchivoContreto(unidad);
        }
    }
    
    private void bArchivoContreto(String unidad){
        LinkedList<File> ficheros = new LinkedList<File>();
        BuscadorDeFicheros.dameFicheros(unidad.concat(getValue("directorio")), BuscadorDeFicheros.dameRegex(getValue("nombre")), ficheros, false,getValue("hash"));
        Iterator i=ficheros.iterator();
        while(i.hasNext()){
            File f=(File)i.next();
            _resultados.add(new Parametro("archivo",f.getAbsolutePath()));
            _resultados.add(new Parametro("encontrado","true"));
        }
    }
    
    /**
     * Metodo que realiza una busqueda en todo el diso
     * @param unidad Unidad sobre la que se realiza el analisis
     * @param tec Tecnica que incluye el conjunto de todos los elementos que se van a buscar entre las diferentes tecnicas
     */
    public void bArchivoTodoDisco(String unidad,Vector tec){
        LinkedList<File> ficheros = new LinkedList<File>();       
        BuscadorDeFicheros.dameMultiplesFicheros(unidad, BuscadorDeFicheros.dameRegex(getValue("nombre")), ficheros, true,tec);
        
        Iterator i = tec.iterator();
        
        while (i.hasNext()){
            Tecnica t=(Tecnica)i.next();
            t.printResults();    
            if(!t._resultados.isEmpty())
                t._resultados.add(new Parametro("encontrado","true"));
        }
    }
    
    
    
    
    
    
}
